#include <stdio.h>
//浮点数存储

void test1()
{
    int n = 9;
    float* pFloat = (float*)&n;
    printf("n的值为:%d\n", n);
    printf("*pFloat的值为:%f\n", *pFloat);
    //0 00000000 00000000000000000001001
    //E为全0，还原为0.00000000000000000001001*2^-126

    *pFloat = 9.0;
    //(-1)^0 * 1.001 * 2^3
    //0 10000010 00100000000000000000000
    printf("num的值为:%d\n", n);
    printf("*pFloat的值为:%f\n", *pFloat);
}

void test2()
{
    float f = 5.5f;
    //S E        M
    //0 10000001 01100000000000000000000
    //01000000 10110000 00000000 00000000
    //40       b0       00       00

}

int main()
{
    test1();
    //test2();
    return 0;
}

//任意二进制浮点数V = (-1)^S * M *2^E
//(-1)^S表示符号位，当S=0时，V为正数；当S=1时，V为负数
//M表示有效数字，大于1且小于2，形式为1.……，所以只需要存储小数点后的序列即可
//2^E表示指数位
//例如5.5->(-1)^0 * 1.011 * 2^2

//32位浮点数（float）
//S-1bit，E-8bit，M-23bit
//64位浮点数（double）
//S-1bit，E-11bit，M-52bit

//E视作无符号整数，但存在一个中间数，存入时，先加上中间数再存
//8位时，中间值是127，127相当于0。
//11位时，中间值是1023，1023相当于0。

//E全为零表示极小的数，还原时，M的整数部分不再添加1，而是添加0
//一般就认为该浮点数是零
//E全为1表示极大的数
//一般情况下还原E的方式是用其储存值减去中间值